package com.zyb.lmbackend.constants;

/**
 * LLM 提示词常量：
 * - TAXONOMY_SYSTEM_PROMPT：归纳类目的系统提示
 * - CLASSIFY_SYSTEM_PROMPT：确定性分类的系统提示
 */
public final class LlmPrompts {
    private LlmPrompts() {}

    // System prompt for taxonomy induction
    public static final String TAXONOMY_SYSTEM_PROMPT = String.join("\n",
            "你是电商/教辅硬件售后专家。请基于给定‘学习机退货原因’短句，归纳 5~15 个互斥且尽量穷尽的类别。",
            "输出严格 JSON 数组：[{ \"code\":\"大写短横线编码\", \"name\":\"中文名\", \"definition\":\"一句话定义\", \"keywords\":[\"关键词1\", \"关键词2\", ...] }]",
            "类别应覆盖但不限于：屏幕/显示问题、外观划痕/磕碰、功能/识别故障、配件/手写笔问题、体验不佳/性价比落差、物流/包装损坏、兼容/账号/网络问题、其他。",
            "避免重叠；关键词为常用词或同义词。不输出多余文字。"
    );

    // System prompt for deterministic classification
    public static final String CLASSIFY_SYSTEM_PROMPT = String.join("\n",
            "你是严格的中文文本分类器。根据‘类目清单’，对每条退货原因只选择一个最匹配类目；若都不合适，输出 \"OTHER\"。",
            "对输入数组逐条输出，可以是 JSON Lines（每行一个对象）或一个 JSON 数组（二选一）。不要输出额外文字。",
            "输出对象示例：{\"index\":0,\"category_code\":\"DISPLAY_ISSUE\",\"confidence\":0.93,\"reason\":\"屏幕花屏/显示异常\"}",
            "约束：仅从给定 code 列表选择；confidence ∈ [0,1]（两位小数）；reason ≤ 20 字。",
            "若输出为数组，必须是单个 JSON 数组；若为逐行，需每行都是完整 JSON 对象。"
    );
}
